package zuoye;

public class LanHan {
    public static void main(String[] args) {
        //6.创建对象进行测试
        MySingle2 s1 = MySingle2.getMySingle2();
        MySingle2 s2 = MySingle2.getMySingle2();
        System.out.println( s1 == s2 );
        System.out.println( s1 );
        System.out.println( s2 );
    }
}
//0.创建单例程序
class MySingle2{
    //1.私有化构造方法
    private MySingle2(){}
    //2.在类的内部创建好引用类型变量--注意私有化
    //5.2本处的引用类型变量也需要修饰成static的,因为静态只能调用静态
    static private MySingle2 single2;
    //7.2.2同步代码块中使用的唯一的锁对象
    static Object o = new Object();
    //3.对外提供公共的全局访问点
    //5.1注意要使用static来修饰本公共方法,为了方便后续可以通过类名直接调用
    //7.1将方法修饰成同步方法
    synchronized static public MySingle2 getMySingle2(){
        //4.当用户调用此方法时,才说明用到这个对象了,那么我们就把这个对象返回
        //7.2可以将操作共享资源的多条语句放入同步代码块之中
        synchronized (o) {
            if (single2 == null) {
                single2 = new MySingle2();
            }
            return single2;
        }
    }
}